在使用 Serenity Framework 開發專案的時候,[DisplayName] 屬性經常是 UI 顯示文字的來源。
理想狀況下,它應該和資料庫欄位註解一致,這樣 UI 上的欄位名稱才能正確、清楚。
但實際上呢?
資料庫註解更新了,Row.cs 沒有人去改。
DisplayName 一多,就容易手滑打錯。
團隊開發時,顯示文字不一致,UI 呈現看起來很亂。
我自己遇過太多次這種情況,所以寫了一個小工具來徹底解決:
它叫 Serenity Row DisplayName Updater,簡稱 serupd。
serupd 的設計理念
serupd 的核心想法很簡單: 「既然資料庫欄位註解就是最好的欄位說明,為什麼不直接拿來當 DisplayName?」
於是,serupd 會:
讀取資料庫欄位的註解
掃描 Row.cs 檔案
自動補上或更新
[DisplayName]屬性
結果就是 UI 文字永遠和資料庫註解保持同步,不再需要手動複製貼上。
功能特色
自動掃描指定資料夾下的所有
*Row.cs檔案支援 SQL Server、PostgreSQL、SQLite
沒有 DisplayName 時會新增,有的話會自動更新
可以加上
--comment-regex,從註解中抽取需要的部分使用 Roslyn API 精準修改,不會破壞原有程式碼格式
可打包成單一執行檔,跨平台部署方便
安裝與使用
1. 環境需求
.NET 9.0+
專案的
appsettings.json要有資料庫連線設定
範例:
{
"Data": {
"Default": {
"ConnectionString": "...",
"ProviderName": "Microsoft.Data.SqlClient"
},
"Postgres": {
"ConnectionString": "...",
"ProviderName": "Npgsql"
}
}
}
2. 執行方式
基本語法:
serupd <Row.cs 所在目錄> [appsettings.json 路徑] [--comment-regex <regex>]
範例:
# 最簡單的用法
serupd C:\MyProject\Modules
# 指定 appsettings.json
serupd C:\MyProject\Modules C:\MyProject\appsettings.json
# 只抓註解中的括號內容
serupd C:\MyProject\Modules --comment-regex "\(([^)]+)\)"
使用前後對照
假設你的資料庫欄位註解是「使用者名稱」。
更新前的 Row.cs:
[Column("UserName")]
public string UserName { get; set; }
執行 serupd 後的 Row.cs:
[DisplayName("使用者名稱")]
[Column("UserName")]
public string UserName { get; set; }
是不是很直覺?這就是 serupd 幫你省下的複製貼上。
一個重要的前提:從資料庫設計開始
要實現這個高效的工作流程,我們必須從專案的源頭——資料庫——就開始打好基礎。 關鍵在於:設計資料庫的 Table 和 Column 時,務必為每一個欄位寫上清晰的註解 (Comment/Description)。
這些註解不只是文件,它們會成為 UI 顯示文字的來源。 如果欄位註解本身就維護良好,那麼 serupd 就能幫你自動把這些資訊同步到程式碼裡。
換句話說,serupd 的效果好不好,很大程度取決於資料庫設計是否「一開始就用心」。
適用情境
你的專案大量使用 Serenity Framework 的 Row 類別
資料庫欄位註解有被維護
想要快速讓 UI label 和資料庫一致
不想再被「手動複製貼上」綁架
目前限制
資料庫註解若沒維護,抓到的內容一樣沒用
Regex 抽取需要自己寫,沒 match 時會回退到註解第一行
目前僅支援 SQL Server / PostgreSQL / SQLite
一次更新很多檔案時,Git diff 可能會很大
未來規劃
多語系支援(例如同時處理中文、英文 DisplayName)
支援更多資料庫(MySQL、Oracle…)
更細緻的設定(是否強制覆蓋、差異 log)
與 CI/CD 整合(自動檢查 DisplayName 是否同步)
結語
serupd 是我為了解決自己開發痛點寫的小工具,現在分享出來,希望能幫到更多人。
它幫我省下了大量時間,讓 UI 顯示名稱自動與資料庫同步,不再需要手動比對、修改。
GitHub 連結:leoshiang/serenity-row-display-name-updater
如果你也在用 Serenity Framework,或許你會發現 serupd 能讓你的開發流程更乾淨、更高效。